<?php

class BlogController extends Controller
{
    
      
	public function actionCategory()                              //Метод выводит список категорий
	{
       $this->importmodel();
       $this->setlayer();                                           //Устанавливает слой для данного контроллера по url из таблицы Linkmenu 
       $criteria = new CDbCriteria;
       $criteria->select = 'id, title, url, public_time, status'; 
       $criteria->condition = 'status = :on';                    //Отображать категорию, если она опубликована
       $criteria->params = array(':on'=>1);
       
	   $model = Blogcategory::model()->findAll($criteria);
	 
       $this->pageTitle = Yii::app()->name.' / Blog';
       Yii::app()->clientScript->registerMetaTag('description my blog', 'description');   //Добавление мета тэга description в head страницы 
       Yii::app()->clientScript->registerMetaTag('keywords my blog', 'keywords');         //Добавление мета тэга keywords в head страницы 
        
     
     	$this->render('category', array('model'=>$model));    
	}



    public function actionPost()                                                                 //ID категории           Метод выводит все посты с кратким содержанием
    {
  Yii::beginProfile('blockID');      //начало профилирования запросов SQL
      $this->importmodel();   
      $this->setlayer();                                                                        //Устанавливает слой для данного контроллера по url из таблицы Linkmenu 
        $cat = Blogcategory::model()->findByAttributes(array('url'=>$_GET['cat'])); 
       
       $criteria = new CDbCriteria;
       $criteria->select = 'id, title, url, public_time, tags, prev_content, status, blogcategory_id';    //Выбираем пост, соответствующий категории
       $criteria->condition = 'blogcategory_id = :id AND status = :on';
       $criteria->params = array(':id'=>$cat->id, ':on'=>1);                                      //Отображает пост, если он опубликован
      
       if($cat->sort_1 == 1)
            $criteria->order = 'public_time DESC';                                      //Сортировка (последний пост вначале)
       if($cat->sort_1 == 2)        
            $criteria->order = 'public_time ASC';                                       //Сортировка (последний пост вконце)
 
 /*
    $dataProvider = new CActiveDataProvider('Blogpost', array(
        'criteria' => $criteria,
        'pagination' =>array(
            'pageSize' =>$cat->paginate,
        )
    )); */
    //----------------------
        $count=Yii::app()->db->createCommand('SELECT COUNT(*)FROM blogpost')->queryScalar();
         $sql = 'SELECT id, title, url, public_time, tags, prev_content, status, blogcategory_id FROM blogpost WHERE blogcategory_id ='.$cat->id.' AND status = 1 ORDER BY public_time ASC';
        $dataProvider=new CSqlDataProvider($sql, array(
				'keyField'=>'id',
				'totalItemCount'=>$count,
		//		'sort'=>array(
		//		'attributes'=>array('title'),
		//		'defaultOrder'=>array('title' => false),
		//		),
			     	'pagination'=>array(
			     	'pageSize'=>$cat->paginate,
				),
			));
    
    
    
    //---------------
       
      
      if($cat->meta_title == '')                                                         //Если поле meta_title пустое в модели
             {
              $pagetitle = $cat->title;                                                 //Тогда присвоить заголовку страницы название категории
             }else
                   $pagetitle = $cat->meta_title;                                        //Если не пустое, тогда название статьи задаётся вручную в БД
            
            
        $this->pageTitle = $pagetitle;                                                           //Заголовок страницы                                            
         Yii::app()->clientScript->registerMetaTag($cat->meta_description , 'description');     //Добавление мета тэга description в head страницы 
         Yii::app()->clientScript->registerMetaTag($cat->meta_keywords, 'keywords');            //Добавление мета тэга keywords в head страницы 
      
                                
          $this->render('post', array('dataProvider'=>$dataProvider,
                                        'cat'=>$cat,
                                        ));                          
 Yii::endProfile('blockID');    //конец профилирования запросов SQL                                   
    }
    
    
    public function actionFullpost()    //ID поста     Метод выводит выбранный пост с полным содержанием
    {
     $this->importmodel();
     $this->setlayer();                     //Устанавливает слой для данного контроллера по url из таблицы Linkmenu 
       $criteria = new CDbCriteria;                                        //Критерий для постов
       $criteria->select = 'id, title, public_time, tags, full_content, meta_title, meta_description, meta_keywords, status';   //Выбираем пост, соответствующий категории
       $criteria->condition = 'url = :url AND status = :on';
       $criteria->params = array(':url'=>$_GET['url'], ':on'=>1);            //Отображает пост, если он опубликован
       
	   $model = Blogpost::model()->findAll($criteria);            
       $cat = Blogpost::model()->with('category')->findByPk($model[0]->id);               //Возвращает категорию
          
       $comment=new Blogcomment;
       	if(isset($_POST['Blogcomment']))   
		{
			$comment->attributes=$_POST['Blogcomment'];
            $comment->post_id = $model[0]->id;                            //Привязываем комментарий к посту
			if($comment->save())                                //Сохраняем комментарии в БД
                  $this->refresh();                             //Обновляем страницу
		}
       
       
       
       if($model[0]->meta_title == '')                                                //Если поле meta_title пустое в модели
             {
              $pagetitle = $model[0]->title.' / '.$cat->category->title;                                        //Тогда присвоить заголовку страницы название категории
             }else
                   $pagetitle = $model[0]->meta_title;                                  //Если не пустое, тогда название статьи задаётся вручную в БД
            
             $this->pageTitle = $pagetitle;                                             //Заголовок страницы
       
                                                    
         Yii::app()->clientScript->registerMetaTag($model[0]->meta_description, 'description');   //Добавление мета тэга description в head страницы 
         Yii::app()->clientScript->registerMetaTag($model[0]->meta_keywords, 'keywords');         //Добавление мета тэга keywords в head страницы  
         
       
        $this->render('fullpost', array('model'=>$model,        //Модель постов
                                        'cat'=>$cat,            //Название категории
                                        'comment'=>$comment,    //Модель для полей ввода комментарий
                                        ));           
    }
   
    
    
    public function actionTagsearch()   //Метод ищет все записи с заданным тегом. Тег приходит через GET
    {
    $this->importmodel();
    $this->setlayer();                  //Устанавливает слой для данного контроллера по url из таблицы Linkmenu 
        if(isset($_GET['tag']))
        {
          $criteria = new CDbCriteria;
          $criteria->select = 'id, blogcategory_id, title, url, public_time'; 
          $criteria->addSearchCondition('tags', $_GET['tag']); 
          $model = Blogpost::model()->findAll($criteria); 
          
          $this->render('tagsearch', array('model'=>$model));    
        }else
            throw new CHttpException(404, 'Страница не найдена');
             
    } 
    
    
    public function taglist($id)        //метод генерирует список тегов в виде строки ($id -- текущий id поста)
    {
         $mod = new Blogpost;
         foreach($mod->tagLinks($id) as $tag) 
            {
                echo $tag.' ';
            }    
    }
    
    
     public function allcomments($post_id)      //метод возвращает все комментарии поста с id = $post_id
   {
    $cnt = array();                             //массив с комментариями
    $connection=Yii::app()->db;

    if(Yii::app()->settings->get('system', 'commentsort') == 1)     //сортировка крмментариев
       {
        $sql = "SELECT content, author, create_time FROM blogcomment WHERE post_id=".$post_id." ORDER BY create_time ASC";
       }else
            $sql = "SELECT content, author, create_time FROM blogcomment WHERE post_id=".$post_id." ORDER BY create_time DESC";

    $comment=$connection->createCommand($sql)->queryAll();              //выполнение запроса
   
    foreach ($comment as $item)                                         //наполнить массив комментариев значениями из БД
        {
            $cnt[] = array('content'=>$item['content'],                 //содержание
                            'author'=>$item['author'],                  //автор
                            'create_time'=>$item['create_time']);       //время создания
        }
    return $cnt;
   }    //end allcomments
    
    

    private function importmodel()
    {
        
         Yii::import('application.modules.admin.modules.blog.models.*');    //Подключение моделей из модуля блога
    }

    private function setlayer()
    {
      $this->layout = Linkmenu::setlayout(1);                               //Устанавливает слой для данного контроллера по url из таблицы Linkmenu  
    }

	// Uncomment the following methods and override them if needed
	/*
	public function filters()
	{
		// return the filter configuration for this controller, e.g.:
		return array(
			'inlineFilterName',
			array(
				'class'=>'path.to.FilterClass',
				'propertyName'=>'propertyValue',
			),
		);
	}

	public function actions()
	{
		// return external action classes, e.g.:
		return array(
			'action1'=>'path.to.ActionClass',
			'action2'=>array(
				'class'=>'path.to.AnotherActionClass',
				'propertyName'=>'propertyValue',
			),
		);
	}
	*/
    
    /**  Блок операций по работе с комментариями */
    
    
    
    	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
   /*  
	public function actionCreate()
	{
		$model=new Blogcomment;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Blogcomment']))
		{
			$model->attributes=$_POST['Blogcomment'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}
    
   */ 
    
    
    /**
	 * Lists all models.
	 */
  /*   
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Blogcomment');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}
    */

	/**
	 * Manages all models.
	 */
  /*   
	public function actionAdmin()
	{
		$model=new Blogcomment('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Blogcomment']))
			$model->attributes=$_GET['Blogcomment'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}
    */

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
  /*   
	public function loadModel($id)
	{
		$model=Blogcomment::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}
*/

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
   /*  
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='blogcomment-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
    
    */
    
    
}  //End class